#include <stdio.h>
#include <assert.h>

void* mymemmove (void* dest , void* src , size_t num)
{

    assert (dest && src) ;

    void* ret = dest ;

    if (dest < src)
    {

        while (num--)
        {

            *(char*) dest = *(char*) src ;

            dest = (char*) dest + 1 ;

            src = (char*) src + 1 ;

        }

    }

    else
    {

        while (num--)
        {

            *((char*) dest + num) = *((char*) src + num) ;
            
        }
        

    }

    return ret ;

}

int main ()
{

    int arr1 [] = { 1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9 , 10 } ;

    mymemmove (arr1 + 2 , arr1 , 20) ;

    for (int i = 0 ; i < 10 ; i++)
    {

        printf ("%d " , arr1 [i]) ;

    }

    return 0 ;

}